/* ***** BEGIN LICENSE BLOCK *****
 *   Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is EasySNAV.
 *
 * The Initial Developer of the Original Code is
 * Antonio Gomes (tonikitoo) <tonikitoo@gmail.com>.
 * Portions created by the Initial Developer are Copyright (C) 2008
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 2 or later (the "GPL"), or
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 *
 * ***** END LICENSE BLOCK ***** */

var reset = true;
var timeoutID = -1;
var keyCodeCandidate = null;

function load() {
    var isModifier = window.arguments[0].inn.isModifier;

    document.getElementById("description1").value = window.arguments[0].inn.prefName + ": ";
    var btn = document.getElementById("button1");
    btn.label = window.arguments[0].inn.prefValue;
    if (!isModifier) {
        window.addEventListener("keypress",
                                function(event) {
                                    if(gSnavUtils.filterCharCode(event.charCode)) {
                                        btn.label = String.fromCharCode(event.charCode);
                                        keyCodeCandidate = event.charCode;
                                        event.stopPropagation();
                                        event.preventDefault();
                                    } else if(gSnavUtils.filterKeycode(event.keyCode)) {
                                        var mapped = gSnavUtils.keyCodeToString(event.keyCode);
                                        if(mapped) {
                                            btn.label = mapped;
                                            keyCodeCandidate = event.keyCode;
                                            event.stopPropagation();
                                            event.preventDefault();
                                        }
                                    }
                                },
                                true);
    } else {
        document.documentElement.setAttribute("title", "alt | ctrl | shift");
        window.addEventListener("keydown",
                                function(event) {
                                    var text = filterInputMod(event);
                                    btn.label = text;
                                    keyCodeCandidate = null;
                                },
                                true);
    }
}

function timeout() {
    reset = true;
    timeoutID = -1;
}

function filterInputMod(event) {

    var text = document.getElementById("button1").label;
    var modifier;

    if(event.keyCode == 16 || event.shiftKey) // shift
        modifier = "shift";
    else if(event.keyCode == 17 || event.ctrlKey) // control
        modifier = "control";
    else if(event.keyCode == 18 || event.altKey) // alt
        modifier = "alt";
    else
        return text;

    if(reset) {
        text = document.getElementById("button1").label = "";
        reset = false;
    }

    if(timeoutID > 0) {
        window.clearTimeout(timeoutID);
    }

    timeoutID = window.setTimeout(timeout, 5000);

    if(text == "" || text == null)
        text = modifier;
    else if(text.indexOf(modifier) == -1)
        text = text + "+" + modifier;

    event.stopPropagation();
    event.preventDefault();

    return text;
}

function ok() {
    window.arguments[0].out =
            { label : document.getElementById("button1").label , key : keyCodeCandidate };

    return true;
}
